from functools import wraps

from starlette.requests import Request

from app.exceptions.base import AppException
from app.http_base import HttpResp


# 节点权限鉴权中间件(装饰器)
def permission_required(permission: str, log: bool = False):
    # 用户访问权限
    def decorator(func):
        @wraps(func)
        async def wrapper(request: Request, *args, **kwargs):
            # 1、获取用户id，如果是超级管理员，则直接放行
            user = True
            if user:
                return await func(request, *args, **kwargs)
            # 2、查询该用户的权限，如果存在，则放行，否则抛出异常
            if permission != "system:login":
                raise AppException(HttpResp.NO_PERMISSION)

            if log:
                # 记录无权限访问日志
                print("记录无权限访问日志")

            # 函数调用
            return await func(request, *args, **kwargs)

        # 返回
        return wrapper

    return decorator
